/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package admin.reportes;

import DBMS.DataBaseManager;
import admin.permisos.PermisosManager;
import clases.Matriz;
import clases.Reportable;
import clases.Reporte;
import clases.Usuario;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

/**
 * @Author Gimbet
 */
public class AgregarMatriz extends DispatchAction {

    private String SUCCESS = "success";
    private String FAILURE = "failure";
    private String PAGE = "page";
    private static final String name = "Agregar Matriz";

    public ActionForward save(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
//        Usuario usr = (Usuario) request.getSession().getAttribute("logueado");
//        DataBaseManager dbms = DataBaseManager.getInstance();
//        if (!PermisosManager.validar(this.name, dbms.consultarPermisoAccion(name), usr.getPermiso())) {
//            System.out.println("No tiene permiso");
//            return mapping.findForward(FAILURE);
//        }
        DataBaseManager dbms = DataBaseManager.getInstance();
        Matriz m = (Matriz) form;
        Reporte r = new Reporte();

        r.setIdreporte(m.getIdReporte());
        System.out.println("ID reporte en saveMatriz " + r.getIdreporte() + " ");
//
//        DataBaseManager dbms = DataBaseManager.getInstance();
        Matriz aux = dbms.consultarMatriz(m);
        m.setNombre(aux.getNombre());

        r = dbms.consultarReporte(r);
        System.out.println("El resto..." + r.getNombre() + "  ");
        System.out.println("Matriz del FORM, ID Nombre: " + m.getIdMatriz() + "  " + m.getNombre());
        ArrayList<Reportable> elementos = dbms.consultarElementosReporte(r);
        r.setReporte(elementos);

        for (Reportable rep : r.getReporte()) {
            Matriz mat = (Matriz) rep;
            System.out.println("Matriz del getReporte: " + mat.getIdMatriz());
            System.out.println("Plan, Ajuste, Ejec: " + mat.isPlan() + " " + mat.isAjuste() + " " + mat.isEjec());
            if ((m.getIdMatriz().compareTo(((Matriz) rep).getIdMatriz())) == 0) {
                System.out.println("La matriz ya existe");
                //Le agrego entonces los set
                if (!m.isPlan()) {
                    m.setPlan(mat.isPlan());
                }
                if (!m.isAjuste()) {
                    m.setAjuste(mat.isAjuste());
                }
                if (!m.isEjec()) {
                    m.setEjec(mat.isEjec());
                }
                m.setNombre(mat.getNombre());
            }
        }

        System.out.println("Voy a agregar NUEVA la matriz");
        if (dbms.agregarMatrizReporte(m, r)) {
            m.setIdReporte(r.getIdreporte()); //Necesito es pasarle el idmatriz y el idreporte
            dbms.modificarMatrizReporte(m, r);
            r.agregarElemento(m);
            r.setMensajeOK("Exito guardando matriz");
            request.setAttribute("reporte", r);
            return mapping.findForward(SUCCESS);
        } else { // Hay que actualizar algun tipo
            if (dbms.modificarMatrizReporte(m, r)) {
                r.setMensajeOK("Exito guardando matriz");
                request.setAttribute("reporte", r);
                return mapping.findForward(SUCCESS);
            } else {
                r.setMensaje("Se produjo un error al agregar la matriz");
                request.setAttribute("reporte", r);
                return mapping.findForward(FAILURE);
            }
        }



    }
}
